package java_thinking.unit_18_IO._18_6;

import java.io.*;

/**
 * @Desc:   格式化内存输入
 *          1.要读取格式化数据，可以使用DataInputStream,它是一个面向字节的I/O类(不是面向字符的),因此用的是InputStream类
 *            为不是Reader类，当然，我们可以用InputStream以字节的形式读取任何数据(如一个文件)，本例中是字符串；
 *          2.ByteArrayInputStream 必须使用字节数组
 *          3.从DataInputStream一次一个字节读取字符，任何字节的值都是合法的结果，因此返回值不能用来检测是否结束；
 * @author: cww
 * @DateTime: 2019/5/14 18:37
 */

public class FormattedMemory {
    public static void main(String[] args) throws IOException {
        DataInputStream in = new DataInputStream(
                new ByteArrayInputStream(BufferedInputFile.read("src/maindemo/java/java_thinking/unit_18_IO/_18_6/FormattedMemory.java").getBytes()));
        try {
            while (true) {
                System.out.print((char) in.readByte());
            }
        } catch (IOException e) {
            System.out.println("End");
        }
    }
}

class TestOf {
    public static void main(String[] args) throws IOException {
        DataInputStream in = new DataInputStream(new BufferedInputStream(new FileInputStream("src/maindemo/java/java_thinking/unit_18_IO/_18_6/FormattedMemory.java")));
        //available的工作方式会随着所读取的媒介类型不同有所不同，“在没有阻塞的情况下所能读取的字节数”，对于文件这以为这整个文件
        // ，但是对于不同类型的流，可能不是酱紫了，要谨慎使用，即使用异常来进行控制，但是这是对异常特性的错误使用
        while (in.available() != 0) {
            System.out.print((char)in.readByte());
        }
    }
}
